// 1. 加载所需的模块
const fs = require("fs");
const path = require("path");
const express = require("express");
const cors = require("cors");

// 2. 创建 app 对象
const app = express(); // application应用

// 3. 指定端口，开启服务
app.listen(3000, () => console.log("express服务器启动了"));

// 4. 中间件配置
// 4.1 配置post请求体的接收
app.use(express.urlencoded({ extended: false }));
// 4.2 配置中间件，解决跨越
app.use(cors());

// 得到books.json 的绝对路径
const booksPath = path.join(__dirname, "books.json");

// 5. ----------开始写接口----------
// 5.1 获取书籍的接口
app.get("/api/getbooks", (req, res) => {
    // 读取books.json
    fs.readFile(booksPath, "utf-8", (err, data) => {
        if (err) return console.log(err);

        // 读取成功，得到一个 data（json格式的字符串），返回结果
        res.send({
            status: 200,
            msg: "获取图书成功",
            data: JSON.parse(data),
        });
    });
});

// 5.2 添加书籍的接口
app.post("/api/addbook", (req, res) => {
    // console.log(req.body);
    req.body.id = Date.now();
    // 把新书，添加到books.json中
    // 5.2.1 读取books.json
    fs.readFile(booksPath, "utf-8", (err, data) => {
        if (err) return console.log(err);

        data = JSON.parse(data);
        // 5.2.2 把新书加进去
        data.push(req.body);
        // 5.2.3 把所有的书，重新写入到books.json中
        fs.writeFile(booksPath, JSON.stringify(data), (err, data) => {
            if (err) {
                console.log(err);
                // 5.2.4 做出响应
                res.send({ status: 400, msg: "添加失败" });
            } else {
                // 5.2.4 做出响应
                res.send({ status: 201, msg: "添加成功" });
            }
        });
    });
});

// 5.3 删除书籍的接口
app.get("/api/delbook", (req, res) => {
    // console.log(req.query); // { id: '1', username: '斗破苍穹', author: '天蚕土豆', publisher: '出版社' }
    let id = req.query.id;

    // 删除代码
    fs.readFile(booksPath, "utf-8", (err, data) => {
        // if (err) return console.log(err);

        data = JSON.parse(data);
        let result = data.filter((item) => item.id != id);
        // 把剩余的存起来
        fs.writeFile(booksPath, JSON.stringify(result), (err, data) => {
            if (err) {
                console.log(err);
                res.send({ status: 500, msg: "删除失败" });
            } else {
                res.send({ status: 200, msg: "删除成功" });
            }
        });
    });
});